<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Introduction</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REV="MADE"
HREF="mailto:pgsql-docs@postgresql.org"><LINK
REL="HOME"
TITLE="PostgreSQL 9.1.2 Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="GIN Indexes"
HREF="gin.html"><LINK
REL="PREVIOUS"
TITLE="GIN Indexes"
HREF="gin.html"><LINK
REL="NEXT"
TITLE="Extensibility"
HREF="gin-extensibility.html"><LINK
REL="STYLESHEET"
TYPE="text/css"
HREF="stylesheet.css"><META
HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=ISO-8859-1"><META
NAME="creation"
CONTENT="2011-12-01T22:07:59"></HEAD
><BODY
CLASS="SECT1"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="5"
ALIGN="center"
VALIGN="bottom"
><A
HREF="index.html"
>PostgreSQL 9.1.2 Documentation</A
></TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
TITLE="GIN Indexes"
HREF="gin.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="top"
><A
HREF="gin.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="60%"
ALIGN="center"
VALIGN="bottom"
>Chapter 54. GIN Indexes</TD
><TD
WIDTH="20%"
ALIGN="right"
VALIGN="top"
><A
TITLE="Extensibility"
HREF="gin-extensibility.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="GIN-INTRO"
>54.1. Introduction</A
></H1
><P
>  <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> stands for Generalized Inverted Index.
  <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> is designed for handling cases where the items
  to be indexed are composite values, and the queries to be handled by
  the index need to search for element values that appear within
  the composite items.  For example, the items could be documents,
  and the queries could be searches for documents containing specific words.
 </P
><P
>  We use the word <I
CLASS="FIRSTTERM"
>item</I
> to refer to a composite value that
  is to be indexed, and the word <I
CLASS="FIRSTTERM"
>key</I
> to refer to an element
  value.  <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> always stores and searches for keys,
  not item values per se.
 </P
><P
>  A <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> index stores a set of (key, posting list) pairs,
  where a <I
CLASS="FIRSTTERM"
>posting list</I
> is a set of row IDs in which the key
  occurs.  The same row ID can appear in multiple posting lists, since
  an item can contain more than one key.  Each key value is stored only
  once, so a <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> index is very compact for cases
  where the same key appears many times.
 </P
><P
>  <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> is generalized in the sense that the
  <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> access method code does not need to know the
  specific operations that it accelerates.
  Instead, it uses custom strategies defined for particular data types.
  The strategy defines how keys are extracted from indexed items and
  query conditions, and how to determine whether a row that contains
  some of the key values in a query actually satisfies the query.
 </P
><P
>  One advantage of <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> is that it allows the development
  of custom data types with the appropriate access methods, by
  an expert in the domain of the data type, rather than a database expert.
  This is much the same advantage as using <ACRONYM
CLASS="ACRONYM"
>GiST</ACRONYM
>.
 </P
><P
>  The <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
>
  implementation in <SPAN
CLASS="PRODUCTNAME"
>PostgreSQL</SPAN
> is primarily
  maintained by Teodor Sigaev and Oleg Bartunov. There is more
  information about <ACRONYM
CLASS="ACRONYM"
>GIN</ACRONYM
> on their
  <A
HREF="http://www.sai.msu.su/~megera/wiki/Gin"
TARGET="_top"
>website</A
>.
 </P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="gin.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="gin-extensibility.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>GIN Indexes</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="gin.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Extensibility</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>